
import java.io.Serializable;
import java.util.Collection;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.Observable;

/**
 * Classe de gestion d'un lecteur.
 * @author IUT, refactoré par E. Ceret
 * @version 2.0
 */
public class Lecteur extends Observable implements Serializable {

	// ************************************************************************************************************
	// Constantes
	// ************************************************************************************************************

	private static final long serialVersionUID = 1L;
	
	// ************************************************************************************************************
	// Attributs
	// ************************************************************************************************************

	private String _nb;
	private String _nom;
	private String _prenom;
	private String _adresse;
	private String _telephone;
	
	// Attributs d'Association
	private HashMap<Integer, Exemplaire> _emprinter;
	
	
	// ************************************************************************************************************
	// Constructeur
	// ************************************************************************************************************

	/**
	 * Constructeur. 
	 * @param nom			nom du lecteur
	 * @param prenom		prenom du lecteur
	 * @param adresse		adresse du lecteur
	 * @param telephone		telephone du lecteur
	 */
	public Lecteur(String nb ,String nom, String prenom, String adresse, String telephone) {
		
		this.setNb(nb);
		this.setNom(nom);
		this.setPrenom(prenom);
		this.setAdresse(adresse);
		this.setTelephone(telephone);
		this.setEmprints(new HashMap<Integer, Exemplaire>());
		
	} // Fin Constructeur
	
	// ************************************************************************************************************
		// Méthodes privées
		// ************************************************************************************************************
		
		// ------------------------------------------------------------------------------------------------------------
		// Affecteurs
	
	
	/**
	 * setter de l'attribut nb
	 * @param nb valeur à affecter au nb du lecteur
	 */
	public void setNb(String nb){
		_nb = nb;
	}
	
	
		/**
		 * setter de l'attribut nom
		 * @param nom valeur à affecter au nom du lecteur
		 */
		public void setNom(String nom){
			_nom = nom;
		}
		
		/**
		 * setter de l'attribut prenom
		 * @param prenom valeur à affecter au prenom du lecteur
		 */
		public void setPrenom(String prenom){
			_prenom = prenom;
		}
		
		/**
		 * setter de l'attribut adresse
		 * @param adresse valeur à affecter à l'adresse du lecteur
		 */
		public void setAdresse(String adresse){
			_adresse = adresse;
		}
		
		/**
		 * setter de l'attribut telephone
		 * @param telephone valeur à affecter au telephone du lecteur
		 */
		public void setTelephone(String telephone){
			_telephone = telephone;
		}
	
		/**
		 * setter de l'attrribut emprinter (ensemble des exemplaire emprinter du lecteur)
		 * @param emprinter hashmap d'emprints
		 */
		public void setEmprints(HashMap<Integer, Exemplaire> emprints) {
			_emprinter = emprints;
			
		}
		
		
		
		public void notifierObservateurs() {
			this.setChanged();
			this.notifyObservers();	
		}
		
		// ------------------------------------------------------------------------------------------------------------
		// Traitements

		/**
		 * Lie un exemplaire au lecteur. Insère un exemplaire dans l'ensemble des exemplaires emprintés du lecteur, avec son isbn.
		 * @param isbn isbn de l'exemplaire à insérer
		 * @param exemplaire exemplaire à insérer
		 */
		private void setEmprints(int nb, Exemplaire exemplaire) {
			_emprinter.put(nb, exemplaire);	
		} // Fin setEmprints
		
		
		
		// ************************************************************************************************************
		// Méthodes publiques
		// ************************************************************************************************************

		// ------------------------------------------------------------------------------------------------------------
		// Accesseurs
		
		
		/**
		 * Getter du nb.
		 * @return NB du lecteur
		 */
		public String getNb() {
			return _nb;
		}
		
		/**
		 * Getter du nom.
		 * @return NOM du lecteur
		 */
		public String getNom() {
			return _nom;
		}
		
		/**
		 * Getter du prenom.
		 * @return PRENOM du lecteur
		 */
		public String getPrenom() {
			return _prenom;
		}
		
		/**
		 * Getter de l'adresse.
		 * @return ADRESSE du lecteur
		 */
		public String getAdresse() {
			return _adresse;
		}
		
		/**
		 * Getter du telephone.
		 * @return TELEPHONE du lecteur
		 */
		public String getTelephone() {
			return _telephone;
		}
		
		/**
		 * getter d'un exemplaire emprinté du lecteur.
		 * @param isbn isbn de l'exemplaire retourné
		 * @return l'exemplaire dont l'isbn a été passé en paramètre, s'il existe
		 */
		public Exemplaire getOuvEmptine(int isbn) {
			return (Exemplaire) _emprinter.get(isbn);
		} // Fin unExemplaire

		/**
		 * getter de l'ensemble des exemplaire emprinter.
		 * @return une collection d'exemplaires
		 */
		public Collection<Exemplaire> getOuvsEmprintes() {
			return _emprinter.values();
		}

		/**
		 * getter du nombre d'exemplaire emprinté du lecteur.
		 * @return un entier représentant le nombre d'exemplaire emprinté
		 */
		public int getNbExemplaire() {
			return _emprinter.size();
		}
		
		// ------------------------------------------------------------------------------------------------------------
		// Traitements

		/**
		 * Ajout d'un exemplaire au lecteur.
		 * @param 
		 * @return  
		 */
		public Exemplaire ajouterExemplaire(GregorianCalendar dateReception, int stat) {
			return null;
		} // Fin ajouterExemplaire
		
		
		
			
	
}//Fin Classe Lecteur